home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs20.d81
/
frcscp64.sfx
/
fracscapes64
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1990-02-12
|
15KB
|
512 lines
10 REM FRACSCAPES 64
20 REM OR
30 REM 3-D FRACTAL LANDSCAPES
40 REM
50 REM BY MICHIEL VAN DE PANNE
60 REM FROM THE JULY ISSUE OF CREATIVE
70 REM COMPUTING (R.I.P.)
80 REM
90 REM HACKED UNMERCIFULLY AND
100 REM MODIFIED FOR THE AMIGA FROM
110 REM THE MAC VERSION BY
120 REM DAVID MILLIGAN, 70707,2521
130 REM AND TED INGALLS
140 REM 10-19-85
150 REM
160 REM ** THIS PROGRAM WILL CONSTRUCT
170 REM ** A REALISTIC 3-D LANDSCAPE
180 REM ** FRACTAL FROM MANY RANDOM
190 REM ** NUMBERS IN UP TO SEVEN
200 REM ** LEVELS OF DETAIL,SIMULATING
210 REM ** MOUNTAIN RANGES, COASTLINES
220 REM ** SEA FLOOR AND/OR SURFACES,
230 REM ** LAKES,ISLANDS,ETC.
240 REM ** ONCE THE ARRAY USED TO DO
250 REM ** THE DRAWING IS CREATED,IT
260 REM ** CAN BE SAVED TO DISK AND
270 REM ** RELOADED AND RE-DRAWN.
280 REM ** WE SAVED THE ARRAY RATHER
290 REM ** THAN THE SCREEN BECAUSE:
300 REM ** (1) WE COULDN'T FIGURE OUT
310 REM ** HOW TO FIND THE START OF
320 REM ** SCREEN MEMORY FROM ABASIC
330 REM ** AND COULDN'T GET A 640X200
340 REM ** SCREEN STUFFED INTO AN
350 REM ** ARRAY, AND
360 REM ** (2) THE ARRAY CAN BE
370 REM ** RE-DRAWN WITH DIFFERENT
380 REM ** SCALING FACTORS FOR
390 REM ** PERSPECTIVE CHANGES AND
400 REM ** WITH SEA LEVEL ON OR OFF
410 REM ** (DEFAULT IS OFF).
420 REM ** THE LENGTH OF TIME REQUIRED
430 REM ** TO DRAW AN ARRAY DEPENDS
440 REM ** ON THE NUMBER OF LEVELS
450 REM ** SELECTED. FOR EACH INCREASE
460 REM ** IN LEVEL THE NUMBER OF
470 REM ** TRIANGULAR SUBDIVISIONS IS
480 REM ** QUADRUPLED. A LEVEL 7
490 REM ** LANDSCAPE HAS THE HIGHEST
500 REM ** 'RESOLUTION', BUT TAKES
510 REM ** OVER AN HOUR TO DRAW.
520 REM
530 REM ** ONE OF THE MAIN THINGS WE
540 REM ** ADDED TO THE ORIGINAL
550 REM ** PROGRAM WAS COLOR. THE 12
560 REM ** COLORS ARE SELECTED BY WHAT
570 REM ** WE DETERMINED WAS ALTITUDE
580 REM ** TO RENDER FORESTS,WATER
590 REM ** SNOW, DIRT, ETC.
600 REM ** CONSIDERING WE UNDERSTAND
610 REM ** VITUALLY NOTHING OF THE
620 REM ** MATH INVOLVED, IT WORKS
630 REM ** PRETTY WELL.
640 REM ** IF YOU'VE GOT A BETTER
650 REM ** IDEA, HAVE AT IT.
660 REM ** THIS PROGRAM IS DEFINATELY
670 REM ** NOT POLISHED,OPTIMIZED OR
680 REM ** BUG FREE, BUT IT IS FUN TO
690 REM ** PLAY WITH.
700 REM ** WHILE I DON'T UNDERSTAND
710 REM ** THEM, I FIND FRACTAL
720 REM ** GRAPHICS GENERATION
730 REM ** FASCINATING. IF YOU'VE GOT
740 REM ** A NIFTY FRACTAL PROGRAM,
750 REM ** UPLOAD IT HERE OR SING OUT
760 REM ** VIA E-MAIL.
770 REM
780 REM DAVID MILLIGAN, 70707,2521
790 REM ******************************
800 REM
810 REM ** FRACSCAPE 64 WOULD NOT BE
820 REM AS NICE WITHOUT THE HIGH
830 REM RESOLUTION GRAPHICS UTILITY
831 REM ($C000-$C81F)
840 REM BY GARY KIZIAK FROM VOLUME
850 REM 5,ISSUE 6 OF TRANSACTOR
860 REM MAGAZINE. ****THANKS********
872 REM THE REST OF FILE 'HIHIRES'
873 REM IS A HIRES SCREEN DUMP
874 REM PROGRAM ($C820-$CAA0)
875 REM
880 REM ** THIS PROGRAM WAS CONVERTED
890 REM FROM AMIGA ABASIC FOR THE C64
900 REM BY DOUG COWARD (DONQUIXOTE ON
910 REM Q-LINK)
920 REM
930 REM THE LOSS OF COLOR THAT THE
940 REM AMIGA IS CAPABLE OF DOES NOT
950 REM TAKE AWAY FROM THE BEAUTY OF
960 REM THESE FRACTALS.
970 REM STANDARD BITMAP MODE DRAWS IN
980 REM ONE COLOR (I PICKED DK. GRAY)
990 REM MULTICOLOR MODE DRAWS IN THREE
1000 REM COLORS ( DK.GRAY,BLUE,GREEN OR
1010 REM DK.GRAY,GREEN,WHITE)
1020 REM
1030 REM PN= ** COLORS **
1040 REM SEALEVEL= 0 1 0 1
1050 REM MC=MULCOLOR 0 0 1 1
1060 REM 0 BACKGROUND 14 14 14 14
1070 REM 1 FOREGROUND 11 11 5 6
1080 REM 2 MULTICOLOR1 -- -- 11 5
1090 REM 3 MULTICOLOR2 -- -- 1 11
1100 REM 4 BORDER 14 14 14 14
1110 REM --------------------------
1120 REM 1 = WHITE (SNOW)
1130 REM 6 = BLUE (WATER)
1140 REM 11= DARK GRAY (ROCK)
1150 REM 5 = GREEN (FOREST)
1160 REM 14= LIGHT BLUE (SKY)
1170 REM
1180 REM THIS PROGRAM CAN BE IMPROVED.
1190 REM IF YOU HAVE IMPROVEMENTS OR IF
1200 REM UNDERSTAND THE MATH OF FRACTAL
1210 REM SEND E-MAIL. ** ENJOY **
1220 REM DOUG COWARD
1230 REM =============================
1235 IF A=0 THEN A=1:LOAD "HIHIRES",8,1
1240 HI=12*4096:DR=HI+3:PL=DR+3:MO=PL+3:CL=MO+3:DM=CL+3:
1250 SC=DM+3:CO=SC+3:BO=CO+3:TE=BO+3:PR=TE+3:CH=PR+3:TR=CH+3
1260 PRINTCHR$(147):SYSTRAP:PI=3.14159:GOSUB1430:PRINT CHR$(158)
1270 PRINT" FRACSCAPES 64"
1280 PRINT" THIS PROGRAM WAS CONVERTED FROM AMIGA "
1290 PRINT" ABASIC FOR THE C64 BY DOUG COWARD"
1300 PRINT" (DONQUIXOTE)"
1310 PRINT" SELECT STANDARD HIRES":PRINT" (ONE COLOR)"
1320 PRINT" OR SELECT MULTICOLOR BITMAP MODE FOR"
1330 PRINT" THREE COLORS AT LOWER RESOLUTION"
1340 REM *** PROGRAM INITIALIZATION ***
1350 PRINT" INITIALIZING ARRAYS"
1360 DIMD(64,33):LE=0
1370 GOSUB4870:FORI=1TO2000:NEXT:GOTO3120
1380 REM ==============================
1390 REM *** WAIT FOR ANY KEY ***
1400 GETA$:IFA$=""THEN1400
1410 RETURN
1420 REM ==============================
1430 REM *** SET INITIAL COLORS ***
1440 POKE53280,14:POKE53281,14
1450 C1=11:C2=1:C3=6
1460 RETURN
1470 REM ==============================
1480 REM CALCULATE ARRAY DATA AND INSERT
1490 PRINT" WORKING ON LEVEL "
1500 DT=2:FORN=1TOLE:DT=DT+2^(N-1):NEXTN
1510 MX=DT-1:MY=MX/2:RH=PI*30/180:VT=RH*1.2
1520 FORN=1TOLE:L=10000/1.8^N
1530 PRINT:PRINT" ";N
1540 IB=MX/2^N:SK=IB*2
1550 GOSUB1610:REM ASSIGN HEIGHTS ALONG X IN ARRAY
1560 GOSUB1690:REM *** ASSIGN HEIGHTS ALONG Y ***
1570 GOSUB1770:REM *** ASSIGN HEIGHTS ALONG Z ***
1580 NEXTN
1590 PRINTCHR$(147):GOTO3030
1600 REM =============================
1610 REM *** HEIGHTS ALONG X ***
1620 FORYE=0TOMX-1STEPSK
1630 FORXE=IB+YETOMXSTEPSK
1640 AX=XE-IB:AY=YE:GOSUB1860:D1=D:AX=XE+IB:GOSUB1860:D2=D
1650 D=(D1+D2)/2+RND(1)*L/2-L/4:AX=XE:AY=YE:GOSUB1920
1660 NEXTXE
1670 NEXTYE:RETURN
1680 REM =============================
1690 REM *** HEIGHTS ALONG Y ***
1700 FORXE=MXTO1STEP-SK
1710 FORYE=IBTOXESTEPSK
1720 AX=XE:AY=YE+IB:GOSUB1860:D1=D:AY=YE-IB:GOSUB1860:D2=D
1730 D=(D1+D2)/2+RND(1)*L/2-L/4:AX=XE:AY=YE:GOSUB1920
1740 NEXTYE
1750 NEXTXE:RETURN
1760 REM =============================
1770 REM *** HEIGHTS ALONG Z ***
1780 FORXE=0TOMX-1STEPSK
1790 FORYE=IBTOMX-XESTEPSK
1800 AX=XE+YE-IB:AY=YE-IB:GOSUB1860:D1=D
1810 AX=XE+YE+IB:AY=YE+IB:GOSUB1860:D2=D
1820 AX=XE+YE:AY=YE:D=(D1+D2)/2+RND(1)*L/2-L/4:GOSUB1920
1830 NEXTYE
1840 NEXTXE:RETURN
1850 REM =============================
1860 REM *** RETURN DATA FROM ARRAY ***
1870 IFAY>MYTHEN1890
1880 BY=AY:BX=AX:GOTO1900
1890 BY=MX+1-AY:BX=MX-AX
1900 D=D(BX,BY):RETURN
1910 REM =============================
1920 REM *** PUT DATA INTO ARRAY ***
1930 IFAY>MYTHEN1950
1940 BY=AY:BX=AX:GOTO1960
1950 BY=MX+1-AY:BX=MX-AX
1960 D(BX,BY)=D:RETURN
1970 REM =============================
1980 REM *** SEA LEVEL SECTION ***
1990 IFSEALEVEL=0THENGOSUB2190:RETURN
2000 IFXO<>-999THEN2030
2010 IFZZ<0THENGOSUB2410:Z2=ZZ:ZZ=0:GOTO2170
2020 GOSUB2450:GOTO2160
2030 IFZ2>0ANDZZ>0THENGOSUB2190:GOTO2160
2040 IFZ2<0ANDZZ<0THENZ2=ZZ:ZZ=0:GOTO2170
2050 W3=ZZ/(ZZ-Z2):X3=(X2-XX)*W3+XX:Y3=(Y2-YY)*W3+YY:Z3=0
2060 ZT=ZZ:YT=YY:XT=XX
2070 IFZZ>0THEN2130
2080 REM =============================
2090 REM *** GOING INTO WATER ***
2100 ZZ=Z3:YY=Y3:XX=X3:GOSUB2710
2110 GOSUB2410:ZZ=0:YY=YT:XX=XT:Z2=ZT:GOTO2170
2120 REM =============================
2130 REM *** COMING OUT OF WATER ***
2140 ZZ=Z3:YY=Y3:XX=X3:GOSUB2710
2150 GOSUB2450:ZZ=ZT:YY=YT:XX=XT
2160 Z2=ZZ
2170 X2=XX:Y2=YY:RETURN
2180 REM =============================
2190 REM *** NEW COLOR SUBROUTINE ***
2200 IFZZ<0THENGOTO2330
2210 REM IF ZZ>950 THEN PENA 2:RETURN
2220 REM IF ZZ>850 THEN PENA 3:RETURN
2230 REM IF ZZ>750 THEN PENA 4:RETURN
2240 IFZZ>750THENPN=C3:GOTO2300
2250 REM IF ZZ>550 THEN PENA 6:RETURN
2260 REM IF ZZ>450 THEN PENA 7:RETURN
2270 REM IF ZZ>350 THEN PENA 12:RETURN
2280 REM IF ZZ>100 THEN PENA 12:RETURN
2290 GOSUB2450
2300 IFMC=0THENPN=C1
2310 RETURN
2320 REM =============================
2330 REM *** BELOW SEA LEVEL ***
2340 IFZZ>-200THENGOSUB2410:RETURN
2350 REM IF ZZ>-500 THEN PENA 9:RETURN
2360 REM IF ZZ>-800 THEN PENA 10:RETURN
2370 REM IF ZZ>-1200 THEN PENA 11:RETURN
2380 REM PENA 11
2390 RETURN
2400 REM =============================
2410 REM *** SWITCH TO SEA LEVEL COLOR ***
2420 PN=C1
2430 F1=1:RETURN
2440 REM =============================
2450 REM *** SWITCH TO LAND COLOR ***
2460 IFMC=1THENPN=C2:GOTO2480
2470 PN=C1
2480 F1=0:RETURN
2490 REM =============================
2500 REM *** ROTATION ***
2510 IFXX<>0THEN2540
2520 IFYY<=0THENRA=-PI/2:GOTO2560
2530 RA=PI/2:GOTO2560
2540 RA=ATN(YY/XX)
2550 IFXX<0THENRA=RA+PI
2560 R1=RA+RH:RD=SQR(XX*XX+YY*YY)
2570 XX=RD*COS(R1):YY=RD*SIN(R1)
2580 RETURN
2590 REM =============================
2600 REM *** TILT DOWN ***
2610 RD=SQR(ZZ*ZZ+XX*XX)
2620 IFXX=0THENRA=PI/2:GOTO2650
2630 RA=ATN(ZZ/XX)
2640 IFXX<0THENRA=RA+PI
2650 R1=RA-VT
2660 XX=RD*COS(R1)+XX:ZZ=RD*SIN(R1)
2670 RETURN
2680 REM =============================
2690 REM *** PLOT TO (XP,YP) ***
2700 GOSUB1980
2710 XX=XX*XS:YY=YY*YS:ZZ=ZZ*ZS
2720 GOSUB2500:REM *** ROTATE ***
2730 GOSUB2600:REM *** TILT UP ***
2740 IFXO=-999THENPR$="M":GOTO2760
2750 PR$="D"
2760 XP=INT(YY)+CX:YP=INT(ZZ)
2770 REM =============================
2780 REM *** DO PLOTTING HERE ***
2790 GETA$:IFA$<>""THEN3120
2800 IFMC=1THENXP=XP/2
2810 XP=XP*.70:YP=140.47+.663*YP:IFPR$="M"THENX8=XP:Y8=YP
2820 SYSDRAW,X8,Y8TOXP,YP,PN:X8=XP:Y8=YP:XO=XP
2830 RETURN
2840 REM =============================
2850 REM *** PLOT X AXIS ***
2860 FORAX=0TOMX:XO=-999:FORAY=0TOAX
2870 GOSUB1860:ZZ=D:YY=AY/MX*10000:XX=AX/MX*10000-YY/2
2880 GOSUB2690:NEXTAY:NEXTAX
2890 RETURN
2900 REM =============================
2910 REM *** PLOT Y AXIS ***
2920 FORAY=0TOMX:XO=-999:FORAX=AYTOMX
2930 GOSUB1860:ZZ=D:YY=AY/MX*10000:XX=AX/MX*10000-YY/2
2940 GOSUB2690:NEXTAX:NEXTAY
2950 RETURN
2960 REM =============================
2970 REM *** PLOT Z AXIS ***
2980 FOREX=0TOMX:XO=-999:FOREY=0TOMX-EX
2990 AX=EX+EY:AY=EY:GOSUB1860:ZZ=D:YY=AY/MX*10000
3000 XX=AX/MX*10000-YY/2:GOSUB2690:NEXTEY:NEXTEX
3010 RETURN
3020 REM =============================
3030 REM *** SETUP SCREEN ***
3040 IFMC=1THENSYSHIRES,1,4,C2,C1,C3:GOTO3060
3050 SYSHIRES,0,4,C1
3060 POKE53280,4:TAX=AX:TAY=AY
3070 GOSUB2970:REM ** PLOT Z AXIS **
3080 GOSUB2910:REM ** PLOT Y AXIS **
3090 GOSUB2850:REM ** PLOT X AXIS **
3100 GOSUB1390
3110 REM =============================
3120 REM *** MAIN MENU SECTION ***
3130 SYSTEXT:PRINTCHR$(147)
3140 POKE53280,14:POKE53281,14
3150 PRINT" CURRENT SETTINGS:":PRINT
3160 IFMC=0THENPRINT" STANDARD BITMAP MODE"
3170 IFMC=1THENPRINT" MULTICOLOR BITMAP MODE"
3180 PRINT" SEALEVEL OPTION ";:IFSEALEVEL=0THENPRINT"OFF"
3190 IFSEALEVEL<>0THENPRINT"ON"
3200 PRINT" SCALE - X=";XS;" Y=";YS;" Z=";ZS
3210 PRINT" -) MAIN MENU (-"
3220 PRINT" 1 - START NEW LANDSCAPE"
3230 PRINT" 2 - DRAW EXISTING ARRAY"
3240 PRINT" 3 - DISPLAY CURRENT HIRES SCREEN"
3250 PRINT" 4 - SAVE FRACTAL ARRAY OR SCREEN"
3260 PRINT" 5 - LOAD FRACTAL ARRAY OR SCREEN"
3270 PRINT" 6 - RESET SCALING FACTORS"
3280 PRINT" 7 - SET SEA LEVEL OPTIONS"
3290 PRINT" 8 - SWITCH BITMAP MODE"
3300 PRINT" 9 - PRINT HIRES SCREEN"
3310 PRINT" 0 - EXIT TO BASIC"
3320 PRINT:PRINT
3330 PRINT" SELECTION (0-9) ";
3340 GETA$:IFA$<"0"ORA$>"9"THEN3340
3350 A=ASC(A$)-48:PRINTCHR$(147)
3360 ONAGOTO3410,4580,4290,3570,3890,4680,4340,4430,3490
3370 REM =============================
3380 REM *** PROGRAM EXIT ***
3390 PRINTCHR$(147):END
3400 REM =============================
3410 PRINT" ** START A NEW FRACTAL LANDSCAPE **"
3420 PRINT" ENTER NUMBER OF LEVELS (1-6)";:INPUTLE
3430 PRINTCHR$(147):IFLE<1ORLE>6THEN3420
3440 PRINT" PRESS ANY KEY TO START."
3450 PRINT" PRESS WHILE DRAWING TO ABORT."
3460 GOSUB1390:PRINTCHR$(147)
3470 GOTO1480
3480 REM =============================
3490 PRINT "PRINT HIRES SCREEN TO COMMODORE PRINTER"
3500 PRINT "AS DEVICE 4":PRINT
3505 PRINT" PRESS 1 FOR 1/4 PAGE SIZE"
3507 PRINT" 2 FOR FULL PAGE SIZE"
3508 GETA$:IF A$<"1"ORA$>"2"THEN3508
3509 POKE2,2:IF A$="1" THEN POKE2,1
3510 IF MC=0 THEN SYSHIRES,0:GOTO 3530
3520 SYSHIRES,1
3530 SYS51232
3550 GOTO 3120
3560 REM =============================
3570 PRINT" *** ARRAY OR SCREEN SAVE ***"
3580 NAME$="":SL=0:SH=0:EL=0:EH=0
3590 PRINT" TO SAVE THE SCREEN, THE COLOR SCREEN"
3600 PRINT" IS MOVED TO $5C00 AND THE BITMAP IS"
3610 PRINT" MOVED TO $6000 AND SAVED. THIS TRASHES"
3620 PRINT" THE ARRAY SO IF YOU WANT BOTH THEN"
3630 PRINT" SAVE THE ARRAY FIRST."
3640 PRINT" PRESS A TO SAVE ARRAY"
3650 PRINT" S TO SAVE HIRES SCREEN"
3660 PRINT" X TO EXIT"
3670 PRINT" SELECTION ";:INPUTA$
3680 IFA$="A"THENA$="ARRAY":GOSUB3720:NAME$=NAME$+".ARY":GOTO3810
3690 IFA$="S"THENA$="SCREEN":GOSUB3720:NAME$=NAME$+".SCN":GOTO3740
3700 IFA$<>"X"THEN3670
3710 PRINTCHR$(147):GOTO3120:REM EXIT
3720 PRINT" EXTENSION '.ARY' OR '.SCN' IS ADDED TO YOUR FILENAME"
3730 PRINT" SAVE ";A$;" AS -> ";:INPUTNAME$:RETURN
3740 DATA 120,169,48,133,1,160,0,162,4,32,237,203,169,224,141,239,203,162
3750 DATA 32,32,237,203,169,55,133,1,88,96,185,0,204,153,0,92,200,208,247,238
3760 DATA 239,203,238,242,203,202,208,238,96
3770 FOR I=52177 TO 52223:READ A:POKE I,A:NEXT I
3780 SYS 52177:REM MOVE SCREEN DOWN TO $5C00
3790 SL=0:SH=92:EL=0:EH=128
3800 GOTO3850
3810 D(0,33)=LE:D(1,33)=MX:D(2,33)=MY:D(3,33)=TAX:D(4,33)=TAY
3820 D(5,33)=XS:D(6,33)=YS:D(7,33)=ZS:D(8,33)=SEALEVEL:D(9,33)=MC
3830 SL=PEEK(47):SH=PEEK(48):EL=PEEK(49):EH=PEEK(50)
3840 REM BSAVE NAME$,A%,L%
3850 SYS57812(NAME$),8:POKE193,SL:POKE194,SH:POKE174,EL:POKE175,EH:SYS62954
3860 PRINTCHR$(147)
3870 GOTO4240
3880 REM =============================
3890 PRINT" *** ARRAY OR SCREEN LOAD ***"
3900 NAME$=""
3910 PRINT" THE SCREEN IS LOADED AT $5C00 "
3915 PRINT"THE COLOR SCREEN IS MOVED UP TO $CC00"
3930 PRINT"AND THE BITMAP IS MOVED TO $E000"
3940 PRINT" THIS TRASHES THE ARRAY SO IF YOU "
3950 PRINT"WANT TO LOAD BOTH THEN LOAD THE"
3960 PRINT"HIRES SCREEN FIRST."
3970 PRINT" PRESS A TO LOAD ARRAY"
3980 PRINT" S TO LOAD HIRES SCREEN"
3990 PRINT" X TO EXIT"
4000 PRINT" SELECTION ";:INPUTA$
4010 IFA$="A"THENA$="ARRAY":GOSUB4050:NAME$=NAME$+".ARY":GOTO4090
4020 IFA$="S"THENA$="SCREEN":GOSUB4050:NAME$=NAME$+".SCN":GOTO4080
4030 IFA$<>"X"THEN4000
4040 PRINTCHR$(147):GOTO3120:REM EXIT
4050 PRINT"ENTER THE FILENAME WITHOUT THE EXTENSION '.ARY' OR '.SCN'"
4060 PRINT" NAME OF ";A$;" TO LOAD -> ";:INPUTNAME$:RETURN
4070 RETURN
4080 REM LOAD SCREEN
4082 SYS57812(NAME$),8:POKE195,0:POKE196,92:POKE780,0:SYS62626
4084 FOR I=0TO1023:POKE52224+I,PEEK(23552+I:NEXT
4086 FOR I=0TO8191:POKE57344+I,PEEK(24576+I:NEXT:GOTO 4240
4090 REM LOAD ARRAY
4100 SYS57812(NAME$),8:POKE195,PEEK(47):POKE196,PEEK(48):POKE780,0:SYS62626
4110 LE=D(0,33):MX=D(1,33):MY=D(2,33):AX=D(3,33):AY=D(4,33)
4120 XS=D(5,33):YS=D(6,33):ZS=D(7,33):SEALEVEL=D(8,33):MC=D(9,33)
4130 PRINTCHR$(147)
4140 PRINT"ARRAY NAME -> ";NAME$
4150 PRINT"NUMBER OF LEVELS -> ";LE
4160 IFSEALEVEL=0THENLEVEL$="OFF":GOTO4180
4170 LEVEL$="ON"
4180 PRINT"SEA LEVEL DISPLAY -> ";LEVEL$
4190 IFMC=0THENPRINT"BITMAP MODE -> STANDARD"
4200 IFMC=1THENPRINT"BITMAP MODE -> MULTICOLOR"
4210 PRINT"SCALING VALUES -> X=";XS
4220 PRINT" Y=";YS
4230 PRINT" Z=";ZS
4240 PRINT" PRESS ANY KEY TO CONTINUE"
4250 GOSUB1390
4260 PRINTCHR$(147)
4270 GOTO3120
4280 REM =============================
4290 REM ** REDISPLAY BITMAP SCREEN **
4300 IFMC=1THENSYSHIRES,1:GOTO4320
4310 SYSHIRES,0
4320 POKE53280,4:GOSUB1390:GOTO3120
4330 REM =============================
4340 PRINT" *** SET SEA LEVEL OPTION ***"
4350 PRINT" DISPLAY SEA LEVEL SURFACE (Y/N) ";:INPUTA$
4360 IFA$="Y"THEN GOTO4390
4370 SEALEVEL=0:IF MC=0 THEN C1=11:GOTO4410
4380 C1=5:C2=11:C3=1:GOTO4410
4390 SEALEVEL=1:IF MC=0 THEN C1=11:GOTO4410
4400 C1=6:C2=5:C3=11
4410 PRINTCHR$(147):GOTO 3120
4420 REM =============================
4430 PRINT" *** SET BITMAP MODE ***"
4440 PRINT" (S)TANDARD BITMAP"
4450 PRINT" (M)ULTICOLOR BITMAP"
4460 PRINT" SELECT BITMAP MODE (S/M):";:INPUTA$
4470 IF A$="M" THEN 4490
4480 MC=0:C1=11:GOTO4510
4490 MC=1:IF SEALEVEL=0 THEN C1=5:C2=11:C3=1:GOTO 4510
4500 C1=6:C2=5:C3=11
4510 PRINTCHR$(147):GOTO 3120
4520 REM =============================
4530 REM *** ERROR TRAP ***
4540 REM ONERRORGOTO4540
4550 A=0
4560 GOTO3120
4570 REM =============================
4580 PRINT" *** REDRAW OLD ARRAY ***"
4590 IFLE=0THEN3120
4600 RH=PI*30/180:VT=RH*1.2
4610 PRINT" CLEAR SCREEN BEFORE RE-DRAW (Y/N):";:INPUTA$
4620 PRINTCHR$(147)
4630 IFA$="Y"THEN GOTO 3030
4640 POKE53280,4:IFMC=1THENSYSHIRES,1:GOTO4660
4650 SYSHIRES,0
4660 GOTO 3060
4670 REM =============================
4680 REM *** SCALING SETTINGS ***
4690 SYSTEXT:PRINTCHR$(147)
4700 PRINT" CURRENT SCALING SETTINGS :"
4710 PRINT:PRINT" X=";XS
4720 PRINT" Y=";YS
4730 PRINT" Z=";ZS
4740 PRINT" PRESS C TO CHANGE SETTINGS"
4750 PRINT" D FOR DEFAULT SETTINGS"
4760 PRINT" X TO EXIT"
4770 REM GOSUB4500
4780 PRINT" SELECTION ";:INPUTA$
4790 IFA$="C"THEN4840
4800 IFA$="D"THENGOSUB4870:GOTO4830
4810 IFA$<>"X"THEN4830
4820 PRINTCHR$(147):GOTO3120
4830 PRINTCHR$(147):GOTO4700
4840 PRINT" INPUT NEW X,Y,Z ";:INPUTXS,YS,ZS
4850 GOTO4830
4860 REM =============================
4870 REM *** STOCK SCALING FACTORS ***
4880 XS=.04:YS=.04:ZS=.05:RETURN
4890 REM =============================
4900 REM **** ERROR TRAP ****
4910 FMEM%=FRE(1)
4920 REM "RATS - AN ERROR OCCURRED"
4930 SYSTEXT:PRINTCHR$(147)
4950 PRINT"THERE ARE ";FMEM%;" BYTES OF MEMORY "
4955 PRINT" PRESS 'E' TO EXIT TO BASIC"
4960 PRINT" PRESS ANY KEY TO CONTINUE...."
4970 GOSUB1390
4980 PRINTCHR$(147)
4985 IF A$="E" THEN END
4990 GOTO3120